// pages/card-create-modify/card-cm.js

const util = require("../../utils/util");
const common = require("../../utils/common");
const requestUtil = require("../../utils/request");
const api = require("../../config/api");
const app = getApp();

Page({

  /**
   * 页面的初始数据
   */
  data: {
    CustomBar: app.globalData.CustomBar,
    pageType: 1, // 页面类型，1创建名片，2修改名片
    phone: null, // 用户手机
    cardInfo: null, // 名片数据，如果PageType是2就需要这个
    reInitToGetPhone: true, // 重置获取手机号
    stepNum: 3, // 步骤数
    stepIndex: 0, // 步骤索引，最大不超过stepNum-1
    hasGetPhoneNumber: false, // 是否已绑定过手机号
    userType: 2, // 角色类型，默认是2
    msg: '', // 第三页显示的信息
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    app.globalData.allowOnShow = false;
    // 安卓有效：隐藏分享按钮
    util.hideShareMenu();
    this.setData({
      pageType: options.type,
      userType: app.globalData.userType,
      hasGetPhoneNumber: app.globalData.hasGetPhoneNumber,
      cardInfo: app.globalData.employeeInfo,
      result: app.globalData.result
    })
    this.setNextPage();
  },

  onShow: function () {
    this.setData({
        cardInfo: app.globalData.employeeInfo
    })
  },

  onUnload: function () {
    app.globalData.allowOnShow = true;
  },

  /**
   * 获取用户手机号
   */
  getPhoneNumber: async function (e) {
    if (e.detail.errMsg.includes('user deny')) {
      wx.showToast({
        title: '请先使用手机号绑定微信',
        icon: 'none'
      });
      return;
    };
    let _this = this;
    let params = {};
    let sessionKey = wx.getStorageSync('session_key')
    params.sessionkey = sessionKey;
    params.ivdata = e.detail.iv;
    params.encrypdata = e.detail.encryptedData;
    if (util.isNullOrEmpty(sessionKey)) {
      this.reLogin(params, "getPhone");
      return;
    }
    // 首次获取手机号
    if (this.data.reInitToGetPhone) {
      wx.checkSession({
        success: () => {
          _this.getPhone(params);
        },
        fail: () => {
          // session_key过期就重新获取
          _this.reLogin(params, "getPhone");
        }
      })
    } else {
      this.reLogin(params, "getPhone");
    }
  },

  /**
   * 获取手机号
   */
  getPhone: async function (params) {
    let _this = this;
    let res = await requestUtil.request("POST", api.urls.getPhone, params);
    if (!res.data) {
      wx.showToast({
        title: '无法获取信息，请重试。',
        icon: 'none'
      })
      _this.setData({
        reInitToGetPhone: false,
      })
      return;
    }
    let phone = res.data.purePhoneNumber; // 没有区号的手机号
    this.bindUser(phone);
  },

  /**
   * 通过手机号查询员工表，如果有，则用户类型为1，否则固定2
   */
  bindUser: async function (phone) {
    let openid = wx.getStorageSync('openid');
    if (!openid) {
      this.reLogin(phone, "bindUser");
      return;
    }
    let params = {
      xcxOpenid: openid,
      mobile: phone
    }
    let bindRes = await requestUtil.request("POST", api.urls.bindEmployee, params);
    if (bindRes.data.code != 0) {
      util.showToast(bindRes.data.msg, 'none');
      return;
    }
    util.showToast('绑定成功', 'success');
    app.globalData.hasGetPhoneNumber = true;
    app.globalData.hasCardInfoWithPhone = true;
    app.globalData.phone = phone;
    this.setData({
      phone: phone,
      hasGetPhoneNumber: true,
      hasCardInfoWithPhone: true,
    })
    // 最后初始化用户信息并获取
    app.onShow();
  },

  /**
   * login重新获取session_key
   */
  reLogin: function (params, type) {
    let _this = this;
    wx.login({
      success: async function (res) {
        let init = await requestUtil.request("POST", api.urls.initUserInfo, {
          code: res.code
        });
        wx.setStorage({
          key: 'openid',
          data: init.data.data.openid
        });
        wx.setStorage({
          key: "session_key",
          data: init.data.data.session_key
        });
        if (type == "getPhone") {
          params.sessionkey = init.data.data.session_key;
          _this.getPhone(params);
        } else if (type == "bindUser") {
          _this.bindUser(params);
        }
      }
    })
  },

  /**
   * 确认表单
   */
  submitForm: async function (e) {
    let _this = this;
    let form = e.detail.value;
    let userType = this.data.userType; // 1 员工，2 顾客
    let flag = common.formValidate(form, userType);
    if (!flag) {
      return;
    }
    // 员工用这个openid
    form.xcxOpenid = wx.getStorageSync('openid');
    // 顾客用这个openid
    form.openid = wx.getStorageSync('openid');
    if (this.data.pageType == 1 && userType == 1) {
      // 若为创建名片且角色是员工

      //TODO url是错的
      // let res = await requestUtil.request("POST", api.urls.bindEmployee, form);
      // if (res.data.code != 0) {
      //   util.showToast(res.data.msg, 'none');
      //   return;
      // }
      // util.showToast(res.data.msg);
      util.showToast('员工信息由管理员统一创建', 'none');
    } else if (this.data.pageType == 1 && userType == 2) {
      // 若为创建名片且角色是顾客
      form.id = null;
      form.phone = app.globalData.phone;
      let res = await requestUtil.request("POST", api.urls.addCustomer, form);
      if (res.data.code != 0) {
        util.showToast(res.data.msg, 'none');
        return;
      }
      util.showToast(res.data.msg);
    } else if (this.data.pageType == 2 && userType == 1) {
      // 修改名片且角色是员工
      let res = await requestUtil.request("POST", api.urls.updateUser, form);
      if (res.data.code != 0) {
        util.showToast(res.data.msg, 'none');
        return;
      }
      util.showToast(res.data.msg);
    } else if (this.data.pageType >= 2 && userType == 2) {
      // 修改名片且角色是顾客
      let res = await requestUtil.request("POST", api.urls.updateCustomer, form);
      if (res.data.code != 0) {
        util.showToast(res.data.msg, 'none');
        return;
      }
      util.showToast(res.data.msg);
    }
    this.getUserInfo(form.xcxOpenid);

    let msg = '';
    if (this.data.pageType == 1) {
      msg = '绑定成功！'
    } else if (this.data.pageType == 2) { 
      msg = '修改成功！'
    } else {
        msg = '留言成功！'
    }
    this.setData({
      msg: msg
    })
    this.numSteps();
  },

  /**
   * 重新获取用户信息
   */
  getUserInfo: function (openid) {
    app.queryInfoByOpenid(openid);
  },

  /**
   * 获取手机下一步
   */
  skipGetPhoneNumber: function () {
    // 如果已经获取了手机号则进行下一页
    if (app.globalData.hasGetPhoneNumber) {
      this.setNextPage();
      return;
    }
    // 如果还未填写手机号
    if (!this.data.phone) {
      util.showToast('请先输入手机号或点击获取手机号按钮进行绑定');
      return;
    }
    this.bindUser(this.data.phone);
    // 然后设置下一页
    this.setNextPage();
  },

  /**
   * 步骤条+1
   */
  numSteps() {
    this.setData({
      stepIndex: this.data.stepIndex >= this.data.stepNum - 1 ? this.data.stepNum : this.data.stepIndex + 1
    });
  },

  /**
   * 输入手机号input触发事件
   */
  inputPhoneNumber: function (e) {
    this.setData({
      phone: e.detail.value
    })
  },

  setNextPage: function () {
    if (!app.globalData.hasGetPhoneNumber) {
      return;
    }
    let cardInfo = app.globalData.userType == 1 ? app.globalData.employeeInfo : app.globalData.customInfo;
    if (this.data.pageType == 1) {
      // 创建页面，如果有数据直接跳到第三页，没有就让用户创建
      if (util.objIsNull(cardInfo)) {
        this.numSteps();
      } else {
        // 直接跳到最后一页
        this.setData({
          stepIndex: 2,
          msg: '绑定成功'
        });
        this.numSteps();
      }
    } else if (this.data.pageType == 2 || this.data.pageType == 3) {
      // 修改名片页面
      // 直接跳到第二页
      this.setData({
        stepIndex: 1,
        cardInfo: cardInfo
      });
    }
  },

  /**
   * 跳转到裁剪图片页面
   */
  toCropper: function () {
    wx.navigateTo({
      url: './cropper/cropper',
    })
  },
})